import { createI18n } from 'vue-i18n';
import messages from '../locale';
import { createDeferred } from '@jecloud/utils';
import { useGlobalStore } from '../store/global-store';
import { pages } from '@/pages.json';
import { UNI_PLATFORM_APP } from './constant';
import { getCurrentPage } from './utils';
let i18n;
/**
 * 获取I18n对象
 * @returns I18n
 */
export function useI18n() {
  return i18n?.global;
}
/**
 * 系统默认语言
 */
let initLocale;
/**
 * 设置当前初始化系统语言
 * @returns locale
 */
export function setInitLocale(locale) {
  initLocale = locale;
}
/**
 * 安装I18n
 * @param {*} app
 */
export function setupI18n(app) {
  i18n = createI18n({
    locale: initLocale || uni.getLocale(),
    messages,
  });
  uni.onLocaleChange(({ locale }) => {
    useI18n().locale = locale;
  });
  app.use(i18n);
}
/**
 * 修改系统语言
 * @param {String} locale 语言
 */
export function changeI18n(locale) {
  const { t } = useI18n();
  // 直接设置系统语言
  const deferred = createDeferred();
  // 移动端会重启
  if (UNI_PLATFORM_APP) {
    // 重启提示
    uni.showModal({
      content: t('system.message.languageChangeConfirm'),
      success: (res) => {
        if (res.confirm) {
          deferred.resolve();
        }
      },
    });
  } else {
    deferred.resolve();
  }
  deferred.promise.then(() => {
    // 设置系统语言
    useI18n().locale = locale;
    useI18n().setLocaleMessage(locale, messages[locale]);
    useGlobalStore().setLocale(locale);
    changeI18n4PageTitle();
    uni.setLocale(locale);
  });
}
/**
 * 修改当前页面标题栏标题
 */
export function changeI18n4PageTitle() {
  // 国际化，处理页面标题
  const currentPage = getCurrentPage();
  const pageConfig = pages.find(
    (page) => page.path === currentPage.route && page.style?.navigationBarTitleText,
  );
  if (pageConfig) {
    let title = pageConfig.style.navigationBarTitleText;
    // 国际化标题，处理
    if (title.startsWith('%') && title.endsWith('%')) {
      title = title.replace('%', '').replace('%', '');
      uni.setNavigationBarTitle({ title: useI18n().t(title) });
    }
  }
}

/**
 * 配合i18n插件使用
 * @param {*} text
 * @returns
 */
export function $t(text) {
  return text;
}
